package algorithm_primary.studyMySelf.初级算法.数组;

/**
 * @author 衡孟浩
 * @date 2023/5/14 16:33
 * <p>
 * 给你一个 升序排列 的数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。
 * 元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
 * <p>
 * 考虑 nums 的唯一元素的数量为 k ，你需要做以下事情确保你的题解可以被通过：
 * <p>
 * 更改数组 nums ，使 nums 的前 k 个元素包含唯一元素，并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
 * 返回 k
 * <p>
 * <p>
 * 提示：
 * <p>
 * 1 <= nums.length <= 3 * 104
 * -104 <= nums[i] <= 104
 * nums 已按 升序 排列
 */
public class 删除排序数组中的重复项 {

    public static void main(String[] args) {
        int[] nums = {1, 1, 2};


        int i = removeDuplicates(nums);
        System.out.println("i = " + i);
        int a = 0;
        //0   a++ 最后再+
        //System.out.println("a++ = " + a++);
        // 1  ++a 先+再处理
        //System.out.println("++a = " + ++a);
    }

    // my
//    public static int removeDuplicates(int[] nums) {
//        // 因为长度大于等于1  所以将数组第一个值保存起来
//        int temp = nums[0];
//        // 因为保存了第一个值所以进行比较  这里就默认他第一个是一直计算值
//        int result = 1;
//        for (int i = 0; i < nums.length; i++) {
//            // 如果发现有值和临时保存的不一样就说明进入到了下一个不一样的值了
//            if (temp != nums[i]) {
//                // 将下一个值给临时变量
//                temp = nums[i];
//                // 计算不同值的计数+1
//                result++;
//                // 因为记数的就是个数  所以这里只需要将个数-1就是需要将下一个唯一值插入的位置下标
//                nums[result - 1] = nums[i];
//            }
//        }
//        return result;
//    }

    // other  使用双指针   一个变量记录 新数据位置   一个变量记录原始的位置
    public static int removeDuplicates(int[] nums) {

        // 原始位置  刚开始肯定为 0
        int org = 0;

        for (int i = 1; i < nums.length; i++) {
            if (nums[org] != nums[i]) {
                nums[++org] = nums[i];
            }
        }
        return ++org;
    }


}
